package com.cskaoyan.javase.oop1._9static._0introduction._new;

/**
 * @description: 使用static关键字修饰成员变量
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * static修饰成员变量,称之为静态成员变量,静态成员变量被全体对象共享,属于类
 * 静态成员变量的语法:
 * [访问权限修饰符] static 数据类型 变量名;
 * 静态成员变量的特点:
 *      1.和普通成员变量一样,都具有默认值(默认值和普通成员变量是一样的)
 *      2.静态成员变量属于类而不是对象,所以不推荐使用对象名访问,而是推荐使用类名点访问
 *      3.静态成员变量的访问/赋值/使用都不依赖于对象
 *
 * > static修饰成员方法被称之静态成员方法，简称静态方法
 * 静态成员方法的定义语法：
 * 1. 需要定义在类的成员位置
 * 2. 语法：
 *    [访问权限修饰符] static 返回值类型 方法名(形参列表){
 *    	//方法体
 *    }
 * 以上，我们把静态成员变量和静态成员方法，统称为类的静态成员
 * 类的成员指的是不加static的普通成员(变量/方法)
 *
 */
public class NewDemo {
    public static void main(String[] args) {
        //Student s = new Student();
        //Static member 'com.cskaoyan.javase.oop1._9static._0introduction._new.Student.schoolName' accessed via instance reference
        //警告: 静态成员schoolName被一个对象的引用所访问了
        //System.out.println(s.schoolName);
        System.out.println(Student.schoolName);
        Student.schoolName = "王道训练营";
        System.out.println(Student.schoolName);
    }
}

//定义学生类
class Student {
    String name;
    //关于性别成员变量的定义,推荐使用String类型
    //除此之外,很多程序员喜欢使用布尔类型的isMale/isFemale
    //boolean isMale; 不建议使用这种形式定义性别(因为在某些极少情况下会导致错误)
    //boolean isFemale;
    String gender;
    int age;
    int stuId;
    static String schoolName;

    public void eat() {
        System.out.println("吃饭!");
    }

    public void study() {
        System.out.println("学习");
    }

    public void sleep() {
        System.out.println("睡觉");
    }

    public Student() {
    }

    public Student(String name, String gender) {
        this.name = name;
        this.gender = gender;
    }
}